草庐IT

C++ operator+ 和 operator+= 重载

全部标签

c++ - 我可以使用 operator== 作为指针吗?

我创建了一些重载了operator==的对象。classCorridor{public:Corridor(intiStart,intiEnd);~Corridor();//Overloadedoperatorstosimplifysearchincontainer.friendbooloperator==(constCorridor&lhs,constintrhs);friendbooloperator==(constintlhs,constCorridor&rhs);protected:intm_iIntersectionIDStart;intm_iIntersectionIDEnd

c++ - 如何避免忘记在子类中定义 operator== ?

我有一个基类并在其上定义了一个运算符==。B是A的子类,我忘记在B上定义operator==。然后A::operator==用于比较B,通常这会产生意想不到的结果。有什么好的方法可以避免这种“忘记”?我添加一个例子来澄清我的问题。classA{public:booloperator==(constA&rhs)const{returni==rhs.i;}inti};classB:publicA{public:intj;}Bb1,b2;b1.i=1;b1.j=2;b2.i=1;b1.j=3;boolb=(b1==b2);//willbetrue 最佳答案

c++ - operator++()和operator++(int)有什么区别?

这个问题在这里已经有了答案:Overloading++forbothpreandpostincrement(4个答案)关闭9年前。我有我老师制作的程序中的这些行代码:TimeKeeper&operator++(){d_seconds++;return*this;}constTimeKeeperoperator++(int){TimeKeepertk(*this);++(*this);returntk;}我的老师问我们的问题之一是“operator++()返回一个引用而operator++(int)返回一个值,请解释为什么?”谁能给我解释一下??如果您需要其余的代码,我不介意把它放在上面

C++ 重载运算符 '>>'

我一直在查看大量不同的示例和解释,但没有一个能真正回答我正在寻找的内容。我有三个类,每个类都有一个名为connect的方法:classfoo{...}voidfoo::connect(barbr){...}classbar{...}bar&bar::connect(bazbz){...}classbaz{...}baz&baz::connect(){...}在我的主课中,我像这样“连接”它们:foo.connect(bar);bar.connect(baz);baz.connect();或:foo.connect(bar.connect(baz.connect()));(我知道这是简要

c++ - visual studio 中涉及 void*、string 和 const char[] 的意外重载解析

我在visualstudio编译器(在VS2010和VS2012中测试)中遇到了以下意外的重载解析行为。最小的例子:#include#includevoidf(void*){std::cout输出:>f(void*)预期输出:>f(conststd::string&)用GCC编译(用4.6.3测试)生成预期的输出。如果我注释掉f()的“conststd::string&”版本,visualstudio会在没有任何警告的情况下愉快地在/W4上编译,而GCC会发出以下错误(如预期的那样):“来自'constvoid的无效转换*'到'void*'[-fpermissive]”。有谁知道为什么

c++ - 错误 : no match for ‘operator<’ in ‘__x < __y’ when trying to insert in two map

在代码中有两个映射。一个存储对和另一个存储,其中值是具有5个变量的类,数据类型为字符串、整数、字符串、整数、整数。但是在插入第二个映射期间,我收到错误g++错误:尝试在map中插入时,'__x如何解决。classValues{private:std::stringC_addr;intC_port;std::stringS_addr;intS_port;intC_ID;public:Values(std::string,int,std::string,int,int);voidprintValues();};Values::Values(std::stringCaddr,intCport

c++ - 递归重载 "->"(成员访问)

我正在学习如何重载“->”并且文档说:“operator->在它返回的值上被再次调用,递归地,直到到达operator->返回一个普通指针。之后,内置语义应用于该指针。”虽然文档说的很清楚,但本质上,一个类的重载“->”本身可以使用一个“特殊指针”,它本身有一个重载的“->”,可以提供一个“特殊指针”等等,直到找到了一个“普通指针”,我找不到实际使用它的示例(除非它用于查找链表的最后一个元素)。有人可以解释幕后的理由是什么吗(因为“普通指针”没有提供这种可能性-所以我看不出有任何理由为它提供“特殊指针”)。现实世界使用的示例也可能有所帮助,因为我可能缺少应用行为的模型。另一方面,可能需

c++ - 对 vector (vector::operator[] 和 vector::size())的只读访问是异步安全的吗?

我的程序需要对vector的内容执行只读访问在SIGINT的信号处理程序中.(另一种方法是使用固定长度的C字符串的固定大小数组。)该程序设计为在POSIX环境中运行。是vector::operator[]和vector::size()异步安全(或信号安全)? 最佳答案 不,这不安全。C++111.9/6:Whentheprocessingoftheabstractmachineisinterruptedbyreceiptofasignal,thevaluesofobjectswhichareneitheroftypevolatile

C++ 重载歧义 : conversion versus promotion with primitive types

在这段代码中:voidf(floatf,longinti){cout有一个歧义。Checkitout!.但是,第二个参数是有符号整数。将int绑定(bind)到longint参数需要提升,但对于float,则需要转换。由于第一个参数是关于两个重载的完全匹配,所以它不算数。但是关于第二个参数,它在第一次过载(提升)上的排名优于在第二个(转化)上的排名。为什么会出现解析歧义,而不是选择第一个重载? 最佳答案 int到long是一个转换。short到int是一种提升。(有关积分促销的完整列表,请参阅[conv.prom]。)同理,floa

c++ - 使用 std::function 参数重载函数:为什么从未调用 const 方法?

#include#include#include#includeusingnamespacestd;classA{public:voiddoStuff(functionfunc)const{coutfunc){cout(str);func(mutableString);});}private:vectorm_vec;};intmain(){autoa=A{};a.doStuff([](string*str){*str="Imodifiedthisstring";});}在此示例中,从未调用const方法。如果代码看起来很奇怪,这就是我正在尝试做的事情:我让客户通过传递一个函数来迭代对象